package Sort2;

/**
 * Created by sunwei on 2017/10/9
 * Time:9:19
 */
public class PersonSort {
     Person a[];
     int nElems;

    /*
    构造函数
    */
    public PersonSort(int maxSize) {
        a = new Person[maxSize];
        nElems = 0;
    }

    /*
    添加人的信息
    */
    public void AddPerson(String firstName, String lastName, int age){
        a[nElems] = new Person(firstName,lastName,age);
        nElems++;
    }

    /*
    遍历显示人的信息
    */
    public void deployPerson(){
        for(int i = 0; i <nElems ; i++) {
            System.out.println("第"+i+"个人：");
            a[i].deployPerson();
        }
    }

    /*
    冒泡排序
    */
    public void BubbleSort(){
        int in , out;
        for(out = nElems-1;out>0 ;out--) {
            for(in = 0;in<out ;in++) {
                if (a[in].getFirstName().compareTo(a[in+1].getFirstName())>0) {
                      Person temp;
                      temp = a[in];
                      a[in] = a[in+1];
                      a[in+1] = temp;
                }
            }
        }
    }

    /*
    插入排序:一开始默认序列的最左端是最小的，此时分界线则为第二个元素，因此应该吧flag标记放到第二个元素的位置，
    此时元素第二个位置为有序和无序的分界线，这个分界线最左端的元素是有序的，从这个序列开始往后序列是无序的，然后判断分界线后面的元素
    和分界线前面的元素谁大，如果有序序列比后面的元素大，那么将这个元素往后移动，直到有元素比后面的小，则把这个元素插入到已经有序的序列相应位置，
    这就是插入排序的思想：先让位子，再插入元素
    */
    public void InsertionSort(){
        int in,out;
        for(out = 1;out<nElems ; out++) {
            Person temp = a[out];
            in = out;
            while (in>0&&a[in-1].getFirstName().compareTo(temp.getFirstName())>0){
                a[in] = a[in-1];
                --in;
            }
            a[in] = temp;
        }
    }

    /*
    选择排序
    */
    public void SelectSort(){
        int in , out,min;
        for(out = 0;out<nElems-1 ; out++) {
            min = out;
            for(in = out+1;in<nElems ;in++) {
                if (a[min].getFirstName().compareTo(a[in].getFirstName())>0) {
                        min = in;
                }
            }
            Person temp;
            temp = a[min];
            a[out] = a[min];
            a[out] = temp;
        }
    }
}
